/*
 * Copyright 2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.elegant.code.design.machine;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.statemachine.StateContext;
import org.springframework.statemachine.listener.StateMachineListenerAdapter;
import org.springframework.statemachine.state.State;

public class StateMachineDaoListener extends StateMachineListenerAdapter<OrderStatus, OrderEvent> {

	@Autowired
	OrderMapper orderMapper;

	@Override
	public void stateContext(StateContext<OrderStatus, OrderEvent> stateContext) {
		OrderEvent event = stateContext.getEvent();
		State<OrderStatus, OrderEvent> target = stateContext.getTarget();
		MessageHeaders messageHeaders = stateContext.getMessageHeaders();
		String orderId = messageHeaders.get("orderId", String.class);
		OrderStatus orderStatus = target.getId();
		UpdateWrapper<Order> wrapper = new UpdateWrapper<>();
		wrapper.eq("orderId", orderId);
		Order record = BeanUtils.mapToBean(orderStatus.getStatus(), Order.class);
		orderMapper.update(record, wrapper);
	}
}
